#include "dirlinklist.h"
//该c文件为链表的相关操作函数，双向循环链表用于存放jpg图片的信息。

//初始化链表
linklist init_list(void)
{
    linklist head = calloc(1,sizeof(listnode));
    head->next = head;
    head->prev = head;
    return head;	
}


//创建新节点
linklist creat_node(char *image_name)
{
	linklist new =calloc(1,sizeof(listnode));
	
	//切记 字符串赋值用strcpy ！！！！！
	strcpy(new->image_name,image_name);
	new->next = new;
	new->prev = new;
	return new;
}


//插入链表末尾
void insert_add_tail(linklist new,linklist head)
{
	new->next = head;
	new->prev = head->prev;
	
	head->prev->next = new;
	head->prev = new ;
}


//遍历链表
void show_list(linklist head)
{
	linklist tmp = head->next;
	while(tmp != head)
	{
		printf("%s",tmp->image_name);
		tmp = tmp->next;
	}
	printf("\n");
}

	
//遍历jpeg目录内图片信息并插入链表中
linklist open_dir(char *argv,linklist head)
{
	//打开目录
	DIR *dp = opendir(argv);
	if(dp == NULL)
	{
		perror("打开目录失败");
		exit(1);
	}
	
	//进入目录 
	chdir(argv);
	
	//获取目录项信息
	struct dirent *ep;
	
	//定义数组存放当前目录路径以及jpg名 
	char path[100] = {0};
	getcwd(path, 100);
	
	//保存jpg信息
	char imag_buf[200] = {0};
	
	
	//遍历目录内的jpg文件
	int n , i;

	
    while((ep = readdir(dp)) != NULL)
	{	
		//strstr找到一个包含“.jpg”名字的文件
		if(strstr(ep->d_name,".jpg"))
		{ 
	        //将其当前路径以及文件名存放在img_buf中
			sprintf(imag_buf , "%s/%s", path , ep->d_name);
			
			//创建链表新节点存放图片信息imag_buf
			linklist new = creat_node(imag_buf);
			
			//将新节点插入到链表末尾
			insert_add_tail(new , head);
		}
	}
    //释放资源
	closedir(dp);
	//返回链表头
	return 	head;
}